package user

import (
	"sg-backend/model"
	"time"
)

// User 用户表
type User struct {
	Id              uint       `json:"id" gorm:"primarykey"`
	Username        string     `json:"username"`
	Email           string     `json:"email"`
	Mobile          string     `json:"mobile"`
	Nickname        string     `json:"nickname"`
	Gender          uint       `json:"gender"` // 1男，0女，2，未知
	Avatar          string     `json:"avatarUrl"`
	Password        string     `json:"password"`
	PasswordSalt    string     `json:"passwordSalt"`
	WxUnionId       string     `json:"wxUnionId"`
	WxId            string     `json:"wxId"`
	IsFirstLogin    bool       `json:"isFirstLogin" gorm:"default:true"`
	IsActive        bool       `json:"isActive" gorm:"default:true"`
	IsSuperuser     bool       `json:"isSuperuser" gorm:"default:false"`
	LastLoginTime   *time.Time `json:"lastLoginTime" gorm:"default:null"`
	model.BaseModel            // createdAt,updatedAt,deletedAt
}

// TableName 设置用户表名称
func (User) TableName() string {
	return "users_user"
}

// Menu 菜单
type Menu struct {
	Id            uint   `json:"id" gorm:"primarykey"`
	Title         string `json:"title"`
	Icon          string `json:"icon" gorm:"default:null"`
	Url           string `json:"url"`
	Pid           uint   `json:"pid"`
	OrderNum      uint   `json:"orderNum"`
	Show          bool   `json:"show" gorm:"default:true"`
	PrivilegeName string `json:"privilegeName"`
}

func (Menu) TableName() string {
	return "users_menu"
}

// Perms 权限标志
type Perms struct {
	Id     uint   `json:"id" gorm:"primarykey"`
	MenuId uint   `json:"menuId" gorm:"default:null"`
	Menu   Menu   `json:"menu"`
	Type   string `json:"type"` // read|add|update|delete
	UserId uint   `json:"userId" gorm:"default:null"`
	User   User   `json:"user"`
}

func (Perms) TableName() string {
	return "users_perms"
}

// Files 文件管理
type Files struct {
	Id              uint   `json:"id" gorm:"primarykey"`
	Name            string `json:"name"`
	SaveName        string `json:"saveName"`
	UploadBy        string `json:"uploadBy"`
	Md5             string `json:"md5"`
	Path            string `json:"path"`
	Size            string `json:"size"`
	Suffix          string `json:"suffix"`
	M3u8            bool   `json:"m3U8"  gorm:"default:false"`
	IsTemp          bool   `json:"isTemp" gorm:"default:false"`
	model.BaseModel        // createdAt,updatedAt,deletedAt
}

func (Files) TableName() string {
	return "users_files"
}

// Logs 日志记录
type Logs struct {
	Id         uint      `json:"id" gorm:"primarykey"`
	Username   string    `json:"username"`
	Level      string    `json:"level"`
	Content    string    `json:"content"`
	CreateTime time.Time `json:"createTime"`
}

func (Logs) TableName() string {
	return "users_logs"
}

// Token 管理
type Token struct {
	Id         uint      `json:"id" gorm:"primarykey"`
	Token      string    `json:"token"`
	UserId     uint      `json:"userId" gorm:"default:null"`
	User       User      `json:"user"`
	JoinTime   time.Time `json:"joinTime"`
	ExpireTime time.Time `json:"expireTime"`
}

func (Token) TableName() string {
	return "users_token"
}
